package com.gisuni.sddc.util;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

public class GeoCoderUtil {
    
	public static Double[] getPosition(String strPlace){
		String strUrl=CommConfig.GeoCoderUrl+strPlace+"&f=json";
		String msg;
		try {
			msg = HttpUtil.get(strUrl);
			JSONObject jsonObject=new JSONObject(msg);
	        if (!jsonObject.getString("status").toLowerCase().equals("ok"))
	        	return null;
	        JSONArray jsonArray=jsonObject.getJSONArray("results");
	        if (jsonArray.length()==0)
	        	return null;
	        
	        jsonObject=(JSONObject)jsonArray.get(0);
	        
	        Double[] position=new Double[2];
	        position[0]=jsonObject.getDouble("latitude");
	        position[1]=jsonObject.getDouble("longitude");
	        
	        return position;
		} catch (Exception e) {
			//e.printStackTrace();
			return null;
		}
        
	} 
	
	public static Double[] getPosition2(String strPlace){
		String url=CommConfig.GeoCoderUrl2;
	    Map<String, String> param=new HashMap<>();
	    param.put("queryStrs", strPlace);//地理编码第一个参数，地址字符串，两个地址之间用换行符隔开
	    param.put("f","json");//返回json格式数据

		try {
			String res = HttpUtil.postStream(url,param);
			JSONObject addressResult = JsonUtil.str2Json(res);
			
			JSONArray addressArray = addressResult.getJSONArray("results");
			JSONObject jsonObj = addressArray.getJSONObject(0);
			Double[] position=new Double[2];
	        position[0]=jsonObj.getDouble("latitude");
	        position[1]=jsonObj.getDouble("longitude");
			
			return position;
			
		} catch (Exception e) {
			//e.printStackTrace();
			return null;
		}
	} 

	/*
	 * 批量获取地名地址编码
	 * strPlaces：多个地址，中间用"\n"分割
	 */
    public static ArrayList<Double[]> getPositionBatch(String strPlaces){
    	String url = CommConfig.GeoCoderUrl2;//地理编码URL
	    Map<String,String> param = new HashMap<>();
	    param.put("queryStrs", strPlaces);//地理编码第一个参数，地址字符串，两个地址之间用换行符隔开
	    param.put("f","json");//返回json格式数据

	    
		try {
			String res = HttpUtil.postStream(url,param);
			JSONObject addressResult = JsonUtil.str2Json(res);
			ArrayList<Double[]> returnResult=new ArrayList<>();
			JSONArray addressArray = addressResult.getJSONArray("results");
			for(int i = 0;i < addressArray.length();i++){
				JSONObject jsonObj = addressArray.getJSONObject(i);
				
				Double[] position=new Double[2];
		        position[0]=jsonObj.getDouble("latitude");
		        position[1]=jsonObj.getDouble("longitude");
				
		        returnResult.add(position);
			}
			return returnResult;
		} catch (Exception e) {
			//e.printStackTrace();
			return null;
		}
    }

    /*
     * 比较安全的方法，当通过GeoQ没有返回数据时,使用另一种方法获取
     */
    public static Double[] getPosition_Ex(String strPlace){
    	Double[] result= getPosition(strPlace);
    	if (result==null){
    		result= getPosition2(strPlace);
    	}
    	return result;
    }
}
